﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using ProveedorPagosREST.Dominio;
using ProveedorPagosREST.Persistencia;
using System.ServiceModel.Web;
using System.Net; 

namespace ProveedorPagosREST
{
    public class Tarjetas : ITarjetas
    {
        private TarjetaDAO dao = new TarjetaDAO();
        public Tarjeta CrearTarjeta(Tarjeta tarjetaACrear)
        {
            return dao.Crear(tarjetaACrear);
        }

        public Tarjeta ObtenerTarjeta(string nro)
        {
            return dao.Obtener(nro);
        }

        public Tarjeta ModificarTarjeta(Tarjeta tarjetaModificar)
        {
            throw new NotImplementedException();
        }

        public Tarjeta EliminarTarjeta(string nro)
        {
            throw new NotImplementedException();
        }

        public List<Tarjeta> ListarTarjetas()
        {
            throw new NotImplementedException();
        }

        public PagoReserva CrearPago(PagoReserva PagoACrear)
        {
            Random Gentransaccion = new Random();
            Tarjeta tarjetaVerificar = dao.Obtener(PagoACrear.NumeroTarjeta);
            if (tarjetaVerificar != null)
            {
                if (PagoACrear.CVV.ToString() == tarjetaVerificar.CVV)
                {
                    if (PagoACrear.AnioExpira == tarjetaVerificar.EJERCICIOV)
                    {
                        if (PagoACrear.MesExpira == tarjetaVerificar.PERIODOV)
                        {
                            if (PagoACrear.MontoReserva <= tarjetaVerificar.SALDO)
                            {
                                PagoACrear.NumeroTxn = Gentransaccion.Next(1, 1000);
                            }
                            else{
                                PagoACrear.NumeroTxn = 0;
                                throw new WebFaultException<string>("Saldo insuficiente, Por favor verificar datos...", HttpStatusCode.InternalServerError);      
                            };
                        }else{
                            PagoACrear.NumeroTxn = 0;
                            throw new WebFaultException<string>("Mes de expiración no es valido, Por favor verificar datos...", HttpStatusCode.InternalServerError);
                        };
                    }else{
                        PagoACrear.NumeroTxn = 0;
                        throw new WebFaultException<string>("Año de expiración no es valido, Por favor verificar datos...", HttpStatusCode.InternalServerError);
                    };
                }else{
                    PagoACrear.NumeroTxn = 0;
                    throw new WebFaultException<string>("CVV no es valido, Por favor verificar datos...", HttpStatusCode.InternalServerError);
                };
            }
            else
            {
                PagoACrear.NumeroTxn = 0;
                throw new WebFaultException<string>("Número de tarjeta no existe, Por favor verificar datos...", HttpStatusCode.InternalServerError);
            };
            return PagoACrear;
        }

        //////public PagoReserva CrearPago(PagoReserva PagoACrear)
        //////{
        //////    Random Gentransaccion = new Random();
        //////    PagoACrear.NumeroTxn = 0;
        //////    Tarjeta tarjetaVerificar = dao.Obtener(PagoACrear.NumeroTarjeta);
        //////    if (tarjetaVerificar != null)
        //////    {
        //////        if (PagoACrear.CVV.ToString() == tarjetaVerificar.CVV)
        //////        {
        //////            if (PagoACrear.AnioExpira == tarjetaVerificar.EJERCICIOV)
        //////            {
        //////                if (PagoACrear.MesExpira == tarjetaVerificar.PERIODOV)
        //////                {
        //////                    if (PagoACrear.MontoReserva <= tarjetaVerificar.SALDO)
        //////                    {
        //////                        PagoACrear.NumeroTxn = Gentransaccion.Next(1, 1000);
        //////                        PagoACrear.MensajeErro = "";
        //////                    }
        //////                    else
        //////                    {
        //////                        PagoACrear.MensajeErro = "Saldo insuficiente, Por favor verificar datos...";
        //////                    };
        //////                }
        //////                else
        //////                {
        //////                    PagoACrear.MensajeErro = "Mes de expiración no es valido, Por favor verificar datos...";
        //////                };
        //////            }
        //////            else
        //////            {
        //////                PagoACrear.MensajeErro = "Año de expiración no es valido, Por favor verificar datos...";
        //////            };
        //////        }
        //////        else
        //////        {
        //////            PagoACrear.MensajeErro = "CVV no es valido, Por favor verificar datos...";
        //////        };
        //////    }
        //////    else
        //////    {
        //////        PagoACrear.MensajeErro = "Número de tarjeta no existe, Por favor verificar datos...";
        //////    };
        //////    return PagoACrear;
        //////}
        
    }
}

